home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume91 / aplictns / mandset1 / part01 / scanfloat.c < prev   
C/C++ Source or Header  |  1991-05-08  |  1KB  |  50 lines

  1.  
  2. /* Routine to scan a floating point number from a null-terminated string.
  3.  * Written 1987 by Russell Wallace. May be freely copied and used in
  4.  * developing Amiga software. Requires linkage with m.lib if used with
  5.  * Aztec C. */
  6.  
  7. typedef double TYPE;    /* Define this as float or double, whichever reqd. */
  8.  
  9. TYPE scanfloat (string)
  10. char *string;
  11. {
  12.     register short i,j,minus;
  13.     TYPE number,column;
  14.     i=minus=0;
  15.     while ((string[i]<'0' || string[i]>'9')&& string[i]!='-' && string[i]!='.' && string[i])
  16.         i++;    /* Search for start of number or end of string */
  17.     if (string[i]=='-')
  18.     {
  19.         minus=1;    /* Is negative number */
  20.         i++;
  21.         if ((string[i]<'0' || string[i]>'9')&& string[i]!='.')
  22.             return ((TYPE)0);
  23.     }
  24.     if (string[i]=='\0')
  25.         return ((TYPE)0);    /* If end of string, return 0 */
  26.     string+=i;    /* Move along to start of string */
  27.     i=0;
  28.     while (string[i]>='0' && string[i]<='9')
  29.         i++;    /* Look for decimal point */
  30.     j=i;
  31.     number=0;
  32.     column=1;
  33.     for (i--;i>=0;i--)    /* Go back from point to start of number */
  34.     {
  35.         number+=(string[i]-'0')*column;    /* add digit value to number */
  36.         column*=10;        /* each column is 10 times value of one to right */
  37.     }
  38.     column=.1;
  39.     if (string[j]=='.')    /* If decimal point, get stuff after it */
  40.         for (i=j+1;string[i]>='0' && string[i]<='9';i++)
  41.         {                /* scan right to end of number */
  42.             number+=(string[i]-'0')*column;
  43.             column/=10;        /* each column 10 times less than one to left */
  44.         }
  45.     if (minus)
  46.         return (-number);
  47.             else
  48.                 return (number);
  49. }
  50.